'use strict';
const {
  Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
  class Courses extends Model {
    /**
     * Helper method for defining associations.
     * This method is not a part of Sequelize lifecycle.
     * The `models/index` file will call this method automatically.
     */
    static associate(models) {
      // define association here
      models.Courses.belongsTo(models.Category, { as: 'category' }),
        models.Courses.belongsTo(models.Users, { as: 'user' })
    }
  }
  Courses.init({
    categoryId: {
      type: DataTypes.INTEGER,
      allowNull: false,
      validate: {
        notEmpty: {
          msg: '分类id不能为空'
        },
        notNull: {
          msg: '分类id不能为空'
        },
        async isCategoryIdExist(value) {
          const category = await sequelize.models.Category.findByPk(value)
          if (!category) {
            throw new Error('分类id不存在')
          }
        }
      }
    },// 分类id
    userId: {
      type: DataTypes.INTEGER,
      allowNull: false,
      validate: {
        notEmpty: {
          msg: '作者id不能为空'
        },
        notNull: {
          msg: '作者id不能为空'
        },
        // 验证用户id是否存在
        async isUserIdExist(value) {
          // 验证用户id是否存在
          const user = await sequelize.models.Users.findByPk(value)
          // 验证用户id是否存在
          if (!user) {
            throw new Error('作者id不存在')
          }
        }
      }
    },// 作者id
    name: {
      type: DataTypes.STRING,
      allowNull: false,
      validate: {
        notEmpty: {
          msg: '课程名称不能为空'
        },
        notNull: {
          msg: '课程名称不能为空'
        },
        len: {
          args: [2, 20],
          msg: '课程名称长度必须在2-20之间'
        },
        // 验证课程名称是否唯一
        async isquniqueName(value) {
          const course = await Courses.findOne({
            where: {
              name: value
            }
          })
          if (course) {
            throw new Error('课程名称已存在')
          }
        }
      }
    },// 课程名称
    image: DataTypes.STRING,// 课程图片
    introduction: DataTypes.TEXT,// 课程介绍
    content: DataTypes.TEXT,// 课程内容
    likeCount: DataTypes.INTEGER,// 点赞数
    chaptedAt: DataTypes.INTEGER// 章节数
  }, {
    sequelize,
    modelName: 'Courses',
  });
  return Courses;
};